package main

import "fmt"

// 请你 原地 删除重复出现的元素，
func removeDuplicates(nums []int) int {
	// 快慢指针
	// i 指向已保存位置后的新保存的位置, j 指向待检查元素
	if len(nums) <= 1 {
		return len(nums)
	}

	i, j := 1, 1 // i 存储元素  i-1比较元素
	cnt := 1
	for j < len(nums) {
		if nums[j] == nums[i-1] {
			// 重复元素跳过
			j++
		} else {
			// 不重复的元素,直接添加到对应的位置
			nums[i] = nums[j]
			cnt++

			i++
			j++
		}
	}
	return cnt
}

func removeDuplicatesV2(nums []int) int {
	// 双指针
	// i 指向保存位置, j 指向待检查元素

	if len(nums) <= 1 {
		return len(nums)
	}

	i, j := 0, 1
	cnt := 1
	for i < j && j < len(nums) {
		for j < len(nums) && nums[j] == nums[i] {
			// 里面都是 ==
			j++
		}
		// j!=i
		if j >= len(nums) || i+1 >= len(nums) {
			break
		}
		nums[i+1] = nums[j]
		cnt++
		i++
		j++
	}

	return i + 1
}

func main() {
	nums := []int{1, 1}
	fmt.Println(nums, removeDuplicates(nums))
}
